home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Tools 2
/
Amiga Tools 2.iso
/
amiga-magazin-pd
/
03-95-2
/
einfach klasse
/
listing-2.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-03-09
|
1KB
|
58 lines
/* © 1995 by C. Marschner
* Zeigt die Verwendung von new und delete mit der Ausnahme-
* behandlung. Schalter »Exceptions« und »Alle Templates«
* in den Compiler-Einstellungen müssen angeschaltet sein. */
#include <stream.h>
#include <string.h>
#include <pragma/exec_lib.h>
#include <exec/memory.h>
#include <classes/exceptions/exceptions.h>
template <class T>
class Mem {
T* mem; int realsize;
public:
Mem(int sz) throw(MemoryX) : realsize(sizeof(T)*sz) {
mem = new T[sz];
if(!mem) throw MemoryX(realsize);
cout << realsize << " Bytes alloziiert\n";
}
operator T*() { return mem; }
~Mem() { cout << "Lösche "<< realsize << " Bytes\n";
delete[] mem; }
};
void allocstring(int size) {
Mem<long> tmp(10); // wird bei Fehler destruiert
Mem<char> str(size);
strcpy(str, "Hello, World\n");
char *s = str; // wegen Mehrdeutigkeit bei cout
cout << s;
}
void main() {
cout << AvailMem(MEMF_TOTAL) << " frei\n";
try {
allocstring(256);
allocstring(33554432); // Haben Sie 32 MB?
} catch(MemoryX mx) {
cout << "Allokation fehlgeschlagen: " <<
mx.size() << " Bytes\n";
cout << AvailMem(MEMF_TOTAL) << " frei\n";
}
}
/* Ausgabe:
9436160 frei (z.B.)
40 Bytes alloziiert
256 Bytes alloziiert
Hello, World
Lösche 256 Bytes
Lösche 40 Bytes
40 Bytes alloziiert
Lösche 40 Bytes
Allokation fehlgeschlagen: 33554432 Bytes
9436160 frei (z.B.)
*/